A Region describes an area of the display surface. The area can be any shape. In other words, the boundary of the area can be a combination of curved and straight lines. Regions can also be created from the interiors of rectangles, paths, or a combination of these. Regions are used in clipping and hit-testing operations.
| Name | Description |
|---|---|
| GdipCloneRegion | Makes a copy of this Region object and returns the address of the new Region object. |
| GdipCombineRegionPath | Updates this region to the portion of itself that intersects the specified path’s interior. |
| GdipCombineRegionRect | Updates this region to the portion of itself that intersects the specified rectangle’s interior. |
| GdipCombineRegionRectI | Updates this region to the portion of itself that intersects the specified rectangle’s interior. |
| GdipCombineRegionRegion | Updates this region to the portion of itself that intersects another region. |
| GdipCreateRegion | Creates a region that is infinite. This is the default constructor. |
| GdipCreateRegionHrgn | Creates a region that is identical to the region that is specified by a handle to a Microsoft Windows Graphics Device Interface (GDI) region. |
| GdipCreateRegionPath | Creates a region that is defined by a path (a GraphicsPath object) and has a fill mode that is contained in the GraphicsPath object. |
| GdipCreateRegionRect | Creates a region that is defined by a rectangle. |
| GdipCreateRegionRectI | Creates a region that is defined by a rectangle. |
| GdipCreateRegionRgnData | Creates a region that is defined by data obtained from another region. |
| GdipDeleteRegion | Deletes a Region object. |
| GdipGetRegionBounds | Gets a rectangle that encloses this region. |
| GdipGetRegionBoundsI | Gets a rectangle that encloses this region. |
| GdipGetRegionData | Gets data that describes this region. |
| GdipGetRegionDataSize | Gets the number of bytes of data that describes this region. |
| GdipGetRegionHRgn | Creates a Microsoft Windows Graphics Device Interface (GDI) region from this region. |
| GdipGetRegionScans | Gets an array of rectangles that approximate this region. The region is transformed by a specified matrix before the rectangles are calculated. |
| GdipGetRegionScansI | Gets an array of rectangles that approximate this region. The region is transformed by a specified matrix before the rectangles are calculated. |
| GdipGetRegionScansCount | Gets the number of rectangles that approximate this region. The region is transformed by a specified matrix before the rectangles are calculated. |
| GdipIsEmptyRegion | Determines whether this region is empty. |
| GdipIsEqualRegion | Determines whether this region is equal to a specified region. |
| GdipIsInfiniteRegion | Determines whether this region is infinite. |
| GdipIsVisibleRegionPoint | Determines whether a point is inside this region. |
| GdipIsVisibleRegionPointI | Determines whether a point is inside this region. |
| GdipIsVisibleRegionRect | Determines whether a rectangle intersects this region. |
| GdipIsVisibleRegionRectI | Determines whether a rectangle intersects this region. |
| GdipSetEmpty | Updates this region to an empty region. In other words, the region occupies no space on the display device. |
| GdipSetInfinite | Updates this region to an infinite region. |
| GdipTransformRegion | Transforms this region by multiplying each of its data points by a specified matrix. |
| GdipTranslateRegion | Offsets this region by specified amounts in the horizontal and vertical directions. |
| GdipTranslateRegionI | Offsets this region by specified amounts in the horizontal and vertical directions. |
Makes a copy of a Region object and returns the address of the new Region object.
FUNCTION GdipCloneRegion (BYVAL region AS GpRegion PTR, BYVAL cloneRegion AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| cloneRegion | [ou] Pointer to a variable that receives a pointer to the new Region object. |
' ========================================================================================
' The following example creates two regions, one from a rectangle and the other from a path.
' Next, the code clones the region that was created from a path and uses a solid brush to
' fill the cloned region. Then, it forms the union of the two regions and fills it.
' ========================================================================================
SUB Example_CloneRegion (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a Path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the Path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a Region object from a rectangle.
DIM rcf AS GpRectF = (65, 15, 70, 45)
DIM rectRegion AS GpRegion PTR
hStatus = GdipCreateRegionRect(@rcf, @rectRegion)
' // Create a region from a curved path.
Dim pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Make a copy (clone) of the curved region.
DIM clonedRegion AS GpRegion PTR
hStatus = GdipCloneRegion(pathRegion, @clonedRegion)
' // Fill the cloned region with a red brush.
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, clonedRegion)
' // Form the union of the cloned region and the rectangular region.
hStatus = GdipCombineRegionRect(clonedRegion, @rcf, CombineModeUnion)
' // Fill the union of the two regions with a semitransparent blue brush.
' // Create brushes
DIM alphaBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(GDIP_ARGB(128, 0, 0, 255), @alphaBrush)
hStatus = GdipFillRegion(graphics, alphaBrush, clonedRegion)
' // Cleanup
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF alphaBrush THEN GdipDeleteBrush(alphaBrush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Updates this region to the portion of itself that intersects the specified path’s interior.
FUNCTION GdipCombineRegionPath (BYVAL region AS GpRegion PTR, BYVAL path AS GpPath PTR, _
BYVAL combineMode AS CombineMode) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| path | [in] Pointer to a GraphicsPath object that specifies the path to use to update this region. |
| combineMode | [in] Member of the CombineMode enumeration that specifies how the region and path are combined. |
' ========================================================================================
' The following example creates a region from a rectangle and then uses a path to update
' the region. The updated region is the union of the rectangular region and the path.
' ========================================================================================
SUB Example_CombineRegionPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a Path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the Path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a Region object from a rectangle.
DIM rcf AS GpRectF = (65, 15, 70, 45)
DIM rectRegion AS GpRegion PTR
hStatus = GdipCreateRegionRect(@rcf, @rectRegion)
' // Form the union of the region and the interior of a path.
hStatus = GdipCombineRegionPath(rectRegion, path, CombineModeUnion)
' // Fill the union of the two regions with a red brush.
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, rectRegion)
' // Cleanup
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Updates this region to the portion of itself that intersects the specified rectangle’s interior.
FUNCTION GdipCombineRegionRect (BYVAL region AS GpRegion PTR, BYVAL rect AS CONST GpRectF PTR, _
BYVAL combineMode AS CombineMode) AS GpStatus
FUNCTION GdipCombineRegionRectI (BYVAL region AS GpRegion PTR, BYVAL rect AS CONST GpRect PTR, _
BYVAL combineMode AS CombineMode) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| rect | [in] Reference to a rectangle to use to update the Region object. |
| combineMode | [in] Member of the CombineMode enumeration that specifies how the region and rect are combined. |
' ========================================================================================
' The following example creates a region from a path and then uses a rectangle to update
' the region. The updated region is the union of the path region and a rectangle.
' ========================================================================================
SUB Example_CombineRegionRect (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a Path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the Path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Form the union of the region and a rectangle.
DIM rcf AS GpRectF = (65, 15, 70, 45)
hStatus = GdipCombineRegionRect(pathRegion, @rcf, CombineModeUnion)
' // Fill the union of the two regions with a red brush.
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Cleanup
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Updates this region to the portion of itself that intersects another region.
FUNCTION GdipCombineRegionRegion (BYVAL region AS GpRegion PTR, BYVAL region2 AS GpRegion PTR, _
BYVAL combineMode AS CombineMode) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| region2 | [in] Pointer to a Region object to use to update an existing Region object. |
| combineMode | [in] Member of the CombineMode enumeration that specifies how the regions are combined. |
' ========================================================================================
' The following example creates a region from a path and then uses a rectangle to update
' the region.
' ========================================================================================
SUB Example_CombineRegionRegion (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a Path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the Path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Create a Region from a rectangle.
DIM rcf AS GpRectF = (65, 15, 70, 45)
DIM rectRegion AS GpRegion PTR
hStatus = GdipCreateRegionRect(@rcf, @rectRegion)
' // Exclude a rectangle region from the path region.
hStatus = GdipCombineRegionRegion(pathRegion, rectRegion, CombineModeIntersect)
' // Fill the union of the two regions with a red brush.
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Cleanup
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Creates a region that is infinite.
FUNCTION GdipCreateRegion (BYVAL region AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [out] Pointer to a variable that receives a pointer to the new created Region object. |
DIM region AS GpRegion PTR
GdipCreateRegion(@region)
Creates a region that is identical to the region that is specified by a handle to a Microsoft Windows Graphics Device Interface (GDI) region.
FUNCTION GdipCreateRegionHrgn (BYVAL hRgn AS HRGN, BYVAL region AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| hRgn | [in] Handle to an existing GDI region. |
| region | [out] Pointer to a variable that receives a pointer to the new created Region object. |
' ========================================================================================
' Creates a region that is identical to the region that is specified by a handle to a
' Microsoft Windows Graphics Device Interface (GDI) region.
' ========================================================================================
SUB Example_CreateRegionHrgn (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a simple GDI region (an ellipse)
DIM hRgn AS HRGN
hRgn = CreateEllipticRgn(50, 50, 200, 150)
' // Convert the GDI region to a GDI+ region
DIM gdipRegion AS GpRegion PTR
hStatus = GdipCreateRegionHrgn(hRgn, @gdipRegion)
' // Fill the GDI+ region with a brush
DIM brush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_GREEN, @brush)
hStatus = GdipFillRegion(graphics, brush, gdipRegion)
' // Cleanup
IF brush THEN GdipDeleteBrush(brush)
IF gdipRegion THEN GdipDeleteRegion(gdipRegion)
IF graphics THEN GdipDeleteGraphics(graphics)
IF hRgn THEN DeleteObject(hRgn)
END SUB
' ========================================================================================
Creates a region that is defined by a path (a GraphicsPath object) and has a fill mode that is contained in the GraphicsPath object.
FUNCTION GdipCreateRegionPath (BYVAL path AS GpPath PTR, BYVAL region AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to a GraphicsPath object that specifies the path. |
| region | [out] Pointer to a variable that receives a pointer to the new created Region object. |
' // Create a path
DIM path AS GpPath PTR
GdipCreatePath(FillModeAlternate, @path)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
GdipCreateRegionPath(path, @pathRegion)
Creates a region that is defined by a rectangle.
FUNCTION GdipCreateRegionRect (BYVAL rect AS CONST GpRectF PTR, BYVAL region AS GpRegion PTR PTR) AS GpStatus
FUNCTION GdipCreateRegionRect (BYVAL rect AS CONST GpRect PTR, BYVAL region AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| rect | [in] Reference to a rectangle. |
| region | [out] Pointer to a variable that receives a pointer to the new created Region object. |
' // Create a Region object from a rectangle.
DIM rcf AS GpRectF = (65, 15, 70, 45)
DIM rectRegion AS GpRegion PTR
GdipCreateRegionRect(@rcf, @rectRegion)
Creates a region that is defined by data obtained from another region.
FUNCTION GdipCreateRegionRgnData (BYVAL regionData AS CONST BYTE PTR, _
BYVAL size AS INT_, BYVAL region AS GpRegion PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| regionData | [in] Pointer to an array of bytes that specifies a region. The data contained in the bytes is obtained from another region by using the GdipGetRegionData function. |
| size | [in] Long integer value that specifies the number of bytes in the regionData array. |
| region | [out] Pointer to a variable that receives a pointer to the new created Region object. |
' ========================================================================================
' The following example recreates a region from the data of that region.
' ========================================================================================
SUB Example_CreateRegionRgnData (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM originalRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @originalRegion)
' // Get the region data size
DIM dataSize AS UINT
hStatus = GdipGetRegionDataSize(originalRegion, @dataSize)
' // Allocate buffer and get region data
DIM regionBuffer AS STRING = SPACE(dataSize)
DIM sizeFilled AS UINT
hStatus = GdipGetRegionData(originalRegion, STRPTR(regionBuffer), dataSize, @sizeFilled)
' // Create a new region from the region data
DIM recreatedRegion AS GpRegion PTR
hStatus = GdipCreateRegionRgnData(STRPTR(regionBuffer), sizeFilled, @recreatedRegion)
' // Fill the recreated region with a brush
DIM brush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_BLUE, @brush)
hStatus = GdipFillRegion(graphics, brush, recreatedRegion)
' // Cleanup
IF brush THEN GdipDeleteBrush(brush)
IF recreatedRegion THEN GdipDeleteRegion(recreatedRegion)
IF originalRegion THEN GdipDeleteRegion(originalRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Deletes a Region object.
FUNCTION GdipDeleteRegion (BYVAL region AS GpRegion PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
GdipCreateFromHDC(hdc, @graphics)
' // Create a rectangular region.
DIM rectRegion AS GpRegion PTR
DIM rcf AS GpRectF = (65, 15, 70, 45)
GdipCreateRegionRect(@rcf, @rectRegion)
' ...
' ...
' ...
' // Cleanup
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF graphics THEN GdipDeleteGraphics(graphics)
Gets a rectangle that encloses this region.
FUNCTION GdipGetRegionBounds (BYVAL region AS GpRegion PTR, BYVAL graphics AS GpGraphics PTR, _
BYVAL rect AS GpRectF PTR) AS GpStatus
FUNCTION GdipGetRegionBoundsI (BYVAL region AS GpRegion PTR, BYVAL graphics AS GpGraphics PTR, _
BYVAL rect AS GpRect PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region and the rectangle. |
| rect | [out] Pointer to a GpRectF structure that receives the enclosing rectangle. |
The current world and page transformations of the graphics object are used to calculate the region and the rectangle as they are drawn on the display device. The rectangle returned by GdipGetRegionBounds is not always the smallest possible rectangle.
' ========================================================================================
' The following example creates a region from a path, gets the region's enclosing rectangle,
' and then displays both.
' ========================================================================================
SUB Example_GetRegionBounds (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Get the region's enclosing rectangle.
DIM rcf AS GpRectF
hStatus = GdipGetRegionBounds(pathRegion, graphics, @rcf)
' // Create a solid brush
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
' // Create a pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLACK, 1.0, UnitWorld, @pen)
' // Show the region and the enclosing rectangle.
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
hStatus = GdipDrawRectangle(graphics, pen, rcf.x, rcf.y, rcf.Width, rcf.Height)
' // Cleanup
IF pen THEN GdipDeletePen(pen)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets data that describes this region.
FUNCTION GdipGetRegionData (BYVAL region AS GpRegion PTR, BYVAL buffer AS BYTE PTR, _
BYVAL bufferSize AS UINT, BYVAL sizeFilled AS UINT PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| buffer | [out] Pointer to an array of BYTE values that receives the region data. |
| bufferSize | [in] Integer that specifies the size, in bytes, of the buffer array. The size of the buffer array can be greater than or equal to the number of bytes required to store the region data. The exact number of bytes required can be determined by calling the GdipGetRegionDataSize function. |
| sizeFilled | [out] Pointer to an UINT that receives the number of bytes of data actually received by the buffer array. The default value is NULL. |
The GdipGetRegionDataSize function can be used before the GdipGetRegionData function to determine the number of bytes needed to store the region data. Then, you can allocate a buffer that is the correct size to store the region data and set the buffer parameter to point to the buffer.
' ========================================================================================
' The following example creates a region from a path and then gets the data that describes
' the region.
' ========================================================================================
SUB Example_GetRegionData (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Get the region data.
DIM bufferSize AS UINT
hStatus = GdipGetRegionDataSize(pathRegion, @bufferSize)
DIM sizeFilled AS UINT
DIM strBuffer AS STRING = SPACE(bufferSize)
hStatus = GdipGetRegionData(pathRegion, STRPTR(strBuffer), bufferSize, @sizeFilled)
'PRINT strBuffer
' // Fill the region with a semitransparent blue brush.
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Cleanup
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets the number of bytes of data that describes this region.
FUNCTION GdipGetRegionDataSize (BYVAL region AS GpRegion PTR, BYVAL bufferSize AS UINT PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| bufferSize | [out] Pointer to a variable that receives the number of bytes of region data. |
The GdipGetRegionDataSize function can be used before the GdipGetRegionData** function to determine the number of bytes needed to store the region data. Then, you can allocate a buffer that is the correct size to store the region data that is obtained by the GdipGetRegionData.
See full example in GdipGetRegionData.
' // Get the region data.
DIM bufferSize AS UINT
hStatus = GdipGetRegionDataSize(pathRegion, @bufferSize)
DIM sizeFilled AS UINT
DIM strBuffer AS STRING = SPACE(bufferSize)
hStatus = GdipGetRegionData(pathRegion, STRPTR(strBuffer), bufferSize, @sizeFilled)
Creates a Microsoft Windows Graphics Device Interface (GDI) region from this region.
FUNCTION GdipGetRegionHRgn (BYVAL region AS GpRegion PTR, BYVAL graphics AS GpGraphics PTR, _
BYVAL hRgn AS HRGN PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region. |
| hRgn | [out] Pointer to a variable that receives a Windows handle to a GDI region that is created from this region. |
' ========================================================================================
' The following example creates a Windows GDI+ region from a path and then uses the GDI+
' region to create a GDI region. The code then uses a GDI function to display the GDI region.
' ========================================================================================
SUB Example_GetRegionHRgn (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to a path.
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Get a handle to a GDI region.
DIM hRegion AS HRGN
hStatus = GdipGetRegionHRgn(pathRegion, graphics, @hRegion)
' // Create a GDI red brush
DIM hBrush AS HBRUSH = CreateSolidBrush(&h0000FF)
' // Use GDI to display the region.
FillRgn(hdc, hRegion, hBrush)
' // Cleanup
IF hBrush THEN DeleteObject(hBrush)
IF hRegion THEN DeleteObject(hRegion)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets an array of rectangles that approximate this region. The region is transformed by a specified matrix before the rectangles are calculated.
FUNCTION GdipGetRegionScans (BYVAL region AS GpRegion PTR, BYVAL rects AS GpRectF PTR, _
BYVAL count AS INT_ PTR, BYVAL matrix AS GpMatrix PTR) AS GpStatus
FUNCTION GdipGetRegionScansI (BYVAL region AS GpRegion PTR, BYVAL rects AS GpRect PTR, _
BYVAL count AS INT_ PTR, BYVAL matrix AS GpMatrix PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| rects | [out] Pointer to an array of GpRectF structures that receives the rectangles. |
| count | [out] Pointer to a LONG that receives a value that indicates the number of rectangles that approximate this region. The value is valid even if rects is a NULL pointer. |
| region | [in] Pointer to a Matrix object that is used to transform the region. |
The GdipGetRegionScansCount function can be used first to determine the number of rectangles. Then, you can allocate a buffer that is the correct size and set the rects parameter to point to the buffer.
' ========================================================================================
' The following example creates a region from a path and gets a set of rectangles that
' approximate the region. The code then draws each of the rectangles.
' ========================================================================================
SUB Example_GetRegionScans (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a Path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add an ellipse to the path
hStatus = GdipAddPathEllipse(path, 30, 10, 50, 230)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Fill the region with a solid brush
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Get current world transform matrix
DIM matrix AS GpMatrix PTR
hStatus = GdipCreateMatrix(@matrix)
hStatus = GdipGetWorldTransform(graphics, @matrix)
' // Get the rectangles.
DIM count AS UINT
hStatus = GdipGetRegionScansCount(pathRegion, @count, matrix)
DIM rects(count - 1) AS GpRectF
hStatus = GdipGetRegionScans(pathRegion, @rects(0), @count, matrix)
' // Create a Pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLACK, 1.0, UnitWorld, @pen)
' // Draw the rectangles.
FOR j AS LONG = 0 TO count - 1
hStatus = GdipDrawRectangle(graphics, pen, rects(j).x, rects(j).y, rects(j).width, rects(j).height)
NEXT
' // Cleanup
IF matrix THEN GdipDeleteMatrix(matrix)
IF pen THEN GdipDeletePen(pen)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets the number of rectangles that approximate this region. The region is transformed by a specified matrix before the rectangles are calculated.
FUNCTION GdipGetRegionScansCount (BYVAL region AS GpRegion PTR, BYVAL count AS UINT PTR, _
BYVAL matrix AS GpMatrix PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| count | [out] Pointer to an UINT that receives a value that indicates the number of rectangles that approximate this region. |
| matrix | [in] Pointer to a Matrix object that is used to transform the region. |
The GdipGetRegionScansCount function can be used before the GdipGetRegionScans function to determine the number of rectangles. Then, you can allocate a buffer that is the correct size to store the rectangles that are obtained with the GdipGetRegionScans function.
See full example inGdipGetRegionScans.
' // Get the rectangles.
DIM count AS UINT
hStatus = GdipGetRegionScansCount(pathRegion, @count, matrix)
DIM rects(count - 1) AS GpRectF
hStatus = GdipGetRegionScans(pathRegion, @rects(0), @count, matrix)
Determines whether this region is empty.
FUNCTION GdipIsEmptyRegion (BYVAL region AS GpRegion PTR, BYVAL graphics AS GpGraphics PTR, _
BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region. |
| result | [out] Pointer to a variable that receives a boolean value that determines whether this region is empty (TRUE) or not (FALSE). |
' // Make the region empty
hStatus = GdipSetEmpty(region)
DIM isEmpty AS BOOL
hStatus = GdipIsEmptyRegion(region, graphics, @isEmpty)
IF isEmpty THEN AfxMsg "The region is empty"
Determines whether this region is equal to a specified region.
FUNCTION GdipIsEqualRegion (BYVAL region AS GpRegion PTR, BYVAL region2 AS GpRegion PTR, _
BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| region2 | [in] Pointer to a Region object to test against this Region object. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region and the region that is specified by the region parameter. |
| result | [out] Pointer to a variable that receives a boolean value that determines whether this region equal to a specified region (TRUE) or not (FALSE). |
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
GdipCreateFromHDC(hdc, @graphics)
' // Create a rectangular region.
DIM rectRegion AS GpRegion PTR
DIM rcf AS GpRectF = (65, 15, 70, 45)
GdipCreateRegionRect(@rcf, @rectRegion)
' // Create another rectangular region.
DIM rectRegion2 AS GpRegion PTR
GdipCreateRegionRect(@rcf, @rectRegion2)
DIM result AS BOOL
GdipIsEqualRegion (rectRegion, rectRegion2, graphics, @result)
IF result THEN AfxMsg("Equal") ELSE AfxMsg("Not equal")
' // Cleanup
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF rectRegion2 THEN GdipDeleteRegion(rectRegion2)
IF graphics THEN GdipDeleteGraphics(graphics)
Determines whether this region is infinite.
FUNCTION GdipIsInfiniteRegion (BYVAL region AS GpRegion PTR, BYVAL graphics AS GpGraphics PTR, _
BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region. |
| result | [out] Pointer to a variable that receives a boolean value that determines whether this region is infinite (TRUE) or not (FALSE). |
' // Make the region infinite
hStatus = GdipSetInfinite(region)
DIM isInfinite AS BOOL
hStatus = GdipIsInfiniteRegion(region, graphics, @isInfinite)
IF isInfinite THEN AfxMsg "The region is infinite"
Determines whether a point is inside this region.
FUNCTION GdipIsVisibleRegionPoint (BYVAL region AS GpRegion PTR, BYVAL x AS REAL, _
BYVAL y AS REAL, BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
FUNCTION GdipIsVisibleRegionPointI (BYVAL region AS GpRegion PTR, BYVAL x AS INT_, _
BYVAL y AS INT_, BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| x | [in] The x-coordinate of the point to test. |
| y | [in] The y-coordinate of the point to test. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region and the point. The default value is NULL. |
| result | [out] Pointer to a variable that receives a boolean value that determines whether a point is inside this region (TRUE) or not (FALSE). |
' ========================================================================================
' The following example creates a region from a rectangle and then checks if a point is
' inside this region.
' ========================================================================================
SUB Example_IsVisibleRegionPoint (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a region from a rectangle
DIM rcf AS GpRectF = (50, 50, 100, 100)
DIM region AS GpRegion PTR
hStatus = GdipCreateRegionRect(@rcf, @region)
' // Fill the the region with a red brush.
DIM redBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @redBrush)
hStatus = GdipFillRegion(graphics, redBrush, region)
' // Test if a point is inside the region
DIM result AS BOOL
hStatus = GdipIsVisibleRegionPoint(region, 75.0, 75.0, graphics, @result)
IF result THEN
MessageBox(NULL, "Point is inside the region", "GDI+", MB_OK)
ELSE
MessageBox(NULL, "Point is outside the region", "GDI+", MB_OK)
END IF
' // Cleanup
IF region THEN GdipDeleteRegion(region)
IF redBrush THEN GdipDeleteBrush(redBrush)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Determines whether a rectangle intersects this region.
FUNCTION GdipIsVisibleRegionRect (BYVAL region AS GpRegion PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL width AS REAL, BYVAL height AS REAL, BYVAL graphics AS GpGraphics PTR, _
BYVAL result AS BOOL PTR) AS GpStatus
FUNCTION GdipIsVisibleRegionRectI (BYVAL region AS GpRegion PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL width AS INT_, BYVAL height AS INT_, BYVAL graphics AS GpGraphics PTR, _
BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| x | [in] The x-coordinate of the upper-left corner of the rectangle to test. |
| y | [in] The y-coordinate of the upper-left corner of the rectangle to test. |
| width | [in] The width of the rectangle to test. |
| height | [in] The height of the rectangle to test. |
| graphics | [in] Pointer to a Graphics object that contains the world and page transformations required to calculate the device coordinates of this region and the rectangle. The default value is NULL. |
| result | [out] Pointer to a variable that receives a boolean value that determines whether a rectangle intersects this region (TRUE) or not (FALSE). |
' ========================================================================================
' The following example creates a region from a rectangle and then tests if another
' rectangle intersects the region.
' ========================================================================================
SUB Example_IsVisibleRegionRect (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a region from a rectangle
DIM rcf AS GpRectF = (50, 50, 100, 100)
DIM region AS GpRegion PTR
hStatus = GdipCreateRegionRect(@rcf, @region)
' // Fill the the region with a red brush.
DIM redBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @redBrush)
hStatus = GdipFillRegion(graphics, redBrush, region)
' // Test if another rectangle intersects the region
DIM result AS BOOL
hStatus = GdipIsVisibleRegionRect(region, 120.0, 120.0, 30.0, 30.0, graphics, @result)
IF result THEN
MessageBox(NULL, "Rectangle intersects the region", "GDI+", MB_OK)
ELSE
MessageBox(NULL, "Rectangle does not intersect the region", "GDI+", MB_OK)
END IF
' // Cleanup
IF region THEN GdipDeleteRegion(region)
IF redBrush THEN GdipDeleteBrush(redBrush)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Updates this region to an empty region. In other words, the region occupies no space on the display device.
FUNCTION GdipSetEmpty (BYVAL region AS GpRegion PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
' ========================================================================================
' The following example creates a region from a rectangle and paints it with a brush. Then
' the code makes the region empty and paints the region with a different color to show that
' the region occupies no space on the display device.
' ========================================================================================
SUB Example_SetEmpty (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a rectangular region.
DIM rectRegion AS GpRegion PTR
DIM rcf AS GpRectF = (50, 60, 300, 120)
hStatus = GdipCreateRegionRect(@rcf, @rectRegion)
' // Fill the region with a red brush
DIM redBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @redBrush)
hStatus = GdipFillRegion(graphics, redBrush, rectRegion)
' // Make the region empty, and then fill it with a blue brush.
' // The color won't change because it is empty and can't be filled with FillRegion.
hStatus = GdipSetEmpty(rectRegion)
DIM blueBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_BLUE, @blueBrush)
hStatus = GdipFillRegion(graphics, blueBrush, rectRegion)
' // Cleanup
IF redBrush THEN GdipDeleteBrush(redBrush)
IF blueBrush THEN GdipDeleteBrush(blueBrush)
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Updates this region to an infinite region.
FUNCTION GdipSetInfinite (BYVAL region AS GpRegion PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
' ========================================================================================
' The following example creates a region from a rectangle, makes the region infinite, and
' fills the region to show the infinite region.
' ========================================================================================
SUB Example_SetInfinite (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a rectangular region.
DIM rectRegion AS GpRegion PTR
DIM rcf AS GpRectF = (65, 15, 70, 45)
hStatus = GdipCreateRegionRect(@rcf, @rectRegion)
' // Make the region infinite, and then fill it with a blue brush.
hStatus = GdipSetInfinite(rectRegion)
' // Fill the region with a blue brush
DIM blueBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_BLUE, @blueBrush)
hStatus = GdipFillRegion(graphics, blueBrush, rectRegion)
' // Cleanup
IF blueBrush THEN GdipDeleteBrush(blueBrush)
IF rectRegion THEN GdipDeleteRegion(rectRegion)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Transforms this region by multiplying each of its data points by a specified matrix.
FUNCTION GdipTransformRegion (BYVAL region AS GpRegion PTR, BYVAL matrix AS GpMatrix PTR) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| matrix | [in] Pointer to a matrix that specifies the transformation. |
' ========================================================================================
' The following example creates a region from a path and fills it. The code then transforms
' the region and fills the transformed region to show the transformation.
' ========================================================================================
SUB Example_GetTransformRegion (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Transform the region.
DIM matrix AS GpMatrix PTR
hStatus = GdipCreateMatrix2(1, 0, 0, 3, 100, 0, @matrix) ' // vertical stretch, shift right
hStatus = GdipTransformRegion(pathRegion, matrix)
' // Fill the region with a brush
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Cleanup
IF matrix THEN GdipDeleteMatrix(matrix)
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Offsets this region by specified amounts in the horizontal and vertical directions.
FUNCTION GdipTranslateRegion (BYVAL region AS GpRegion PTR, BYVAL dx AS REAL, BYVAL dy AS REAL) AS GpStatus
FUNCTION GdipTranslateRegionI (BYVAL region AS GpRegion PTR, BYVAL dx AS INT_, BYVAL dy AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| region | [in] Pointer to the Region object. |
| dx | The amount to shift the region in the x direction. |
| dy | The amount to shift the region in the y direction. |
' ========================================================================================
' The following example creates a region from a path and fills it. The code then translates
' the region and fills the translated region to show how the region has shifted.
' ========================================================================================
SUB Example_GetTranslateRegion (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a closed curve to the path
DIM pts(5) AS GpPointF
pts(0).x = 110 : pts(0).y = 20
pts(1).x = 120 : pts(1).y = 30
pts(2).x = 100 : pts(2).y = 60
pts(3).x = 120 : pts(3).y = 70
pts(4).x = 150 : pts(4).y = 60
pts(5).x = 140 : pts(5).y = 10
hStatus = GdipAddPathClosedCurve(path, @pts(0), 6)
' // Create a region from a path.
DIM pathRegion AS GpRegion PTR
hStatus = GdipCreateRegionPath(path, @pathRegion)
' // Translate the region.
hStatus = GdipTranslateRegion(pathRegion, 100, 60)
' // Fill the region with a brush
DIM solidBrush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @solidBrush)
hStatus = GdipFillRegion(graphics, solidBrush, pathRegion)
' // Cleanup
IF solidBrush THEN GdipDeleteBrush(solidBrush)
IF pathRegion THEN GdipDeleteRegion(pathRegion)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================